const bcrypt = require('bcrypt');
const crypto = require('crypto');

// 模拟前端SHA512哈希
function sha512Hash(password) {
    return crypto.createHash('sha512').update(password).digest('hex');
}

// 测试SHA512+bcrypt组合哈希流程
async function testCombinedHashing() {
    const originalPassword = '123456';
    const saltRounds = 10;
    
    console.log('=== SHA512 + bcrypt 组合哈希测试 ===');
    console.log('原始密码:', originalPassword);
    console.log('原始密码长度:', originalPassword.length);
    
    try {
        // 步骤1: 前端SHA512哈希（模拟注册时）
        const sha512Hashed = sha512Hash(originalPassword);
        console.log('SHA512哈希后:', sha512Hashed);
        console.log('SHA512哈希长度:', sha512Hashed.length);
        
        // 步骤2: 后端bcrypt哈希（模拟注册时）
        const salt = await bcrypt.genSalt(saltRounds);
        const finalHash = await bcrypt.hash(sha512Hashed, salt);
        console.log('最终bcrypt哈希长度:', finalHash.length);
        console.log('最终哈希前缀:', finalHash.substring(0, 20) + '...');
        
        // 步骤3: 登录验证（模拟登录时）
        // 用户输入原始密码 -> 前端SHA512哈希 -> 发送到后端
        const loginSha512Hashed = sha512Hash(originalPassword);
        console.log('登录时SHA512哈希:', loginSha512Hashed);
        
        // 后端比较
        const isMatch = await bcrypt.compare(loginSha512Hashed, finalHash);
        console.log('登录验证结果:', isMatch);
        
        // 测试错误密码
        const wrongPassword = '1234567';
        const wrongSha512Hashed = sha512Hash(wrongPassword);
        const isWrongMatch = await bcrypt.compare(wrongSha512Hashed, finalHash);
        console.log('错误密码验证结果:', isWrongMatch);
        
        console.log('=== 测试完成 ===');
        
    } catch (error) {
        console.error('测试失败:', error);
    }
}

// 运行测试
testCombinedHashing(); 